/* 
 * File:   mthParticulas.h
 * Author: Dr. Juan Carlos Fernandez Toledano
 *
 * Created on 22 de noviembre de 2011, 18:47
 */

#ifndef MTHPARTICULAS_H
#define	MTHPARTICULAS_H

#include "objetos.h"



void BC(particula *part, parametros param)
{
    int dim=3;
#ifdef CONFINED
    dim=2;
#endif 
    
    for (int i=0;i<dim;i++)
    {
        if (part->pos[i]>param.lbox[i])
        {
            part->pos[i]-=param.lbox[i];
        }
        if(part->pos[i]<param.lbox[i])
        {
            part->pos[i]+=param.lbox[i];
        }
    }
}

double boundary(double dx, double lx) 
{
    if(dx>0.5*lx){dx-=lx;}
    if(dx<-0.5*lx) {dx+=lx;}
    return dx;
}


double distancia(particula part1,particula part2, double *dx, double *dy, double *dz, parametros param)
{

    ///Calcula la distancia entre las particulas i y j
    ///Consideramos condiciones de contorno periodicas en el plano xy
    ///pero no en el z donde se encuentran las paredes

    double dis2=0;

    *dx=part2.pos[0]-part1.pos[0];
    *dx=boundary(*dx, param.lbox[0]);

    *dy=part2.pos[1]-part1.pos[1];
    *dy=boundary(*dy, param.lbox[1]);

    *dz=part2.pos[2]-part1.pos[2];
    #ifndef CONFINED
    *dz=boundary(*dz, param.lbox[2]);
    #endif

    dis2=(*dx)*(*dx)+(*dy)*(*dy)+(*dz)*(*dz);
    return sqrt(dis2);
}

void initForces(particula *part, parametros param)
{
    
    for (int i=0;i<param.npart;i++) 
    {
        for (int j=0;j<3;j++)
        {
            part[i].force[j]=0;
        }
    }
}

#endif	/* MTHPARTICULAS_H */

